﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Security.Cryptography;
using LCTMoodle.Models.ViewModels;
using LCTMoodle.Models.DataModels;
using LCTMoodle.Service;
using LCTMoodle.Helper;

namespace LCTMoodle.Controllers
{
    public class DangNhapController : Controller
    {
        /// <summary>
        /// Xử lý đăng nhập
        /// </summary>
        /// <param name="form"></param>
        public ActionResult XuLyDangNhap(FormCollection form)
        {
            #region Kiểm tra quyền
            if (Session["NguoiDung"] != null)
            {
                TempData["ThongBao"] =
                    new string[] 
                    {
                        "Đã đăng nhập"
                    };
                return RedirectToAction("Index", "TrangChu");
            }
            #endregion Kiểm tra quyền

            #region Kiểm tra thông tin
            if (form["TenDangNhap"] == "" || form["MatKhau"] == "")
            {
                TempData["ThongBao"] =
                    new string[] 
                    {
                        "Thông tin không đầy đủ"
                    };
                return RedirectToAction("Index", "TrangChu");
            }
            #endregion Kiểm tra thông tin

            //Khai báo lớp mã hoá MD5
            MD5 md5Hash = MD5.Create();

            //Lấy thông tin người dùng cần đăng nhập theo tên đăng nhập
            NguoiDungViewModel nguoiDung = NguoiDungService.layNguoiDungTheoTenDangNhap(form["TenDangNhap"]);

            //Nếu thông tin lấy về là null => tên đăng nhập không tồn tại
            if (nguoiDung == null)
            {
                TempData["ThongBao"] =
                    new string[] 
                    {
                        "Tên đăng nhập không tồn tại hoặc có lỗi"
                    };
                return RedirectToAction("Index", "TrangChu");
            }
            //Nếu mật khẩu trùng khớp với mật khẩu người dùng nhập => đăng nhập thành công
            else if (TienIch.KiemTraMaHoa(md5Hash, form["MatKhau"], nguoiDung.matKhau))
            {
                //Thành công
                Session["NguoiDung"] = nguoiDung;

                //Lưu đăng nhập
                DangNhapDataModel dangNhap = new DangNhapDataModel();
                dangNhap.maNguoiDung = nguoiDung.ma;
                dangNhap.diaChi = Request.ServerVariables["REMOTE_ADDR"];
                DangNhapService.themDangNhap(dangNhap);

                //Xử lý bộ đếm
                int[] boDem = (int[])HttpContext.Application["BoDem"];
                //Nếu tồn tại session người dùng => thành viên
                boDem[1]++; //Tăng thành viên trực tuyến
                boDem[0]--; //Giảm khách trực tuyến

                //Lưu cookie
                if (form.Get("DuyTri") != null)
                {
                    HttpCookie cookie = new HttpCookie("NguoiDung");
                    cookie["Ma"] = nguoiDung.ma.ToString();
                    cookie.Expires = DateTime.Now.AddDays(7);
                    Response.Cookies.Add(cookie);
                }

                TempData["ThongBao"] =
                    new string[] 
                    {
                        "Đăng nhập thành công",
                        "Tot"
                    };
                return Redirect(Request.UrlReferrer.ToString());
            }
            //Nếu không sẽ đăng nhập thất bại
            else
            {
                TempData["ThongBao"] =
                    new string[] 
                    {
                        "Mật khẩu không đúng"
                    };
                return RedirectToAction("Index", "TrangChu");
            }
        }

        /// <summary>
        /// Đăng xuất
        /// </summary>
        /// <returns></returns>
        public ActionResult DangXuat()
        {
            #region Kiểm tra quyền
            if (!TienIch.daDangNhap())
            {
                TempData["ThongBao"] =
                    new string[] 
                    {                        
                        "Chưa đăng nhập"
                    };
                return RedirectToAction("Index", "TrangChu");
            }
            #endregion Kiểm tra quyền

            //Xóa danh sách quyền đã lưu
            ((Dictionary<int, string>)Session["Quyen"]).Clear();

            //Xóa danh sách người dùng
            Session.Remove("NguoiDung");

            //Xử lý bộ đếm
            int[] boDem = (int[])HttpContext.Application["BoDem"];
            //Nếu tồn tại session người dùng => thành viên
            boDem[1]--; //Giảm thành viên trực tuyến
            boDem[0]++; //Tăng khách trực tuyến

            //Xóa cookie
            Response.Cookies["NguoiDung"].Expires = DateTime.Now;

            TempData["ThongBao"] =
                new string[] 
                    {                        
                        "Đăng xuất thành công",
                        "Tot"
                    };
            return RedirectToAction("Index", "TrangChu");
        }
    }
}
